package Sequence;

public class Test0011 {
    public static void main(String[] args) {
        new Solution0011_3().maxArea(new int[]{1,8,6,2,5,4,8,3,7});
    }

}

/*
给定一个长度为 n 的整数数组 height 。有 n 条垂线，第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线，使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明：你不能倾斜容器。

输入：[1,8,6,2,5,4,8,3,7]
输出：49
解释：图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下，容器能够容纳水（表示为蓝色部分）的最大值为 49。
示例 2：

输入：height = [1,1]
输出：1


提示：

n == height.length
2 <= n <= 105
0 <= height[i] <= 104
*/

class Solution0011_2 {
    public int maxArea(int[] height) {
        int i = 0, j = height.length - 1, res = 0;
        while(i < j) {
            res = height[i] < height[j] ?
                    Math.max(res, (j - i) * height[i++]):
                    Math.max(res, (j - i) * height[j--]);
        }
        return res;
    }
}

class Solution0011_second {
    public int maxArea(int[] height) {
        int l=0,r=height.length-1;
        int result=0;
        int temp=0;
        while(l<r) {
            if(height[l]>=height[r]){
                temp=height[r]*(r-l);
                r--;
            }else {
                temp=height[l]*(r-l);
                l++;
            }
            if (temp>result) result=temp;
        }
        return result;
    }
}

class Solution0011_3 {
    public int maxArea(int[] height) {
        int length = height.length;
        int l=0,r=length-1,ans=0;

        while (l<r) {
            int s;
            if (height[l]>=height[r]) s=height[r--];
            else s=height[l++];

            ans=Math.max((r-l+1)*s,ans);
        }

        return ans;
    }
}